#define  _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

//测试逻辑

void menu()//打印菜单
{
	printf("************************************\n");
    printf("************** 1.play **************\n");
    printf("************** 0.exit **************\n");
    printf("************************************\n");
    
}

void game()//游戏实现
{
    //9*9格子
    //使用数组存放数据
    //使用随机数生成雷块位置
    //统计格子周围雷块数

    /*
    问题1：如何表示雷？
    1、*-->非雷  #-->雷
    2、创建两个数组，数组1存放布置好雷的信息，数组2存放排查信息（周围有几个雷）
    
    问题2：统计二维数组周边的雷数时，有越界风险。
    1、增加一圈，9*9 --> 11*11
    

    都使用字符数组
    排查数组：
    未排查时显示*，排查时显示数字
    原始布置数组：
    0-->非雷  1-->雷
    */

    char mine[ROWS][COLS] = { 0 };//存放布置雷的信息
    char show[ROWS][COLS] = { 0 };//存放排查信息
    /*
    对于mine数组，最开始默认都是0，表示没有雷-->初始化 0
    对于show数组，最开始默认都是*，表示未排查-->初始化 *
    */

    //初始化棋盘
    InitBoard(mine, ROWS, COLS, '0');//11*11
    InitBoard(show, ROWS, COLS, '*');

    //打印棋盘
    //DisplayBoard(mine, ROW, COL);
    DisplayBoard(show, ROW, COL);//9*9

    //布置雷
    SetMine(mine, ROW, COL);
    //DisplayBoard(mine, ROW, COL);//验证有没有布置雷

    //排查雷
    FindMine(mine, show, ROW, COL);

    //结束游戏
    //1.踩雷炸死
    //2.排雷成功
    //3.中途退出

}

//游戏主逻辑
void test()
{
    srand((unsigned int)time(NULL));
    int choice = 0;

    do
    {
        menu();
        printf("请选择：");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            printf("开始游戏\n");
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误，请重新选择\n");
        }
        system("pause");
        system("cls");
    } while (choice);

}

int main()
{
    test();

    //游戏扩展：
    //1.是否可以选择游戏难度（棋盘大小、地雷数量）
    //2.如果排查位置不是雷，周围没有雷，则自动展开周围的一片 --> 函数递归
    //3.是否可以标记雷
    //4.是或否可以加上排雷时间显示
    //5.是否可以实现前端界面

    return 0;
}